身為前端我們常會聽到 Clean Code 這個字眼,又或者是各種設計模式,但這些主要是針對 JavaScript 的內容,雖然也有人提到 CSS 的優化,但比較多是在閱讀優化的成分,例如說 BEM( Block Element Modifier),原子化 CSS,但對於 CSS 的效能優化基本上沒有提到,今天讓我們來聊聊 CSS 的 Reflow 和 Repaint 吧。
雖然很難會真的感受到 CSS 爆掉
CSS Reflow 主要會發生在當頁面的布局結構發生變化時,瀏覽器需要重新計算元素的尺寸、幾何屬性,當頁面的布局十分複雜時重排的頻繁發生會導致性能下降,以下提出一些常見的策略防止重排
DocumentFragment
來建立一個虛擬節點來將需要掛上真實 DOM 的節點先放在這邊,最後一並掛上去。重繪與重排類似,不過他主要是發生在不影響布局的屬性,像是陰影、顏色等等,我們一樣有些可以避免頻繁重繪的小技巧
transform
, opacity
, filter
。我們應該注意 DOM 結構不應該套太深,以避免同時觸發過多的 CSS 重排效果,並且減少 CSS 表達式,如 calc()
之類的計算方式。